import { initMixin } from './init'
import { stateMixin } from './state'
import { renderMixin } from './render'
import { eventsMixin } from './events'
import { lifecycleMixin } from './lifecycle'
import { warn } from '../util/index'
import type { GlobalAPI } from 'typescript/global-api'
// 定义了 Vue 构造函数
function Vue(options) {
  if (__DEV__ && !(this instanceof Vue)) {
    warn('Vue is a constructor and should be called with the `new` keyword')
  }
  this._init(options)
}

//@ts-expect-error Vue has function type
initMixin(Vue)  //给 Vue 新增一个 _init 方法
//@ts-expect-error Vue has function type
stateMixin(Vue) //通过 Object.defineProperty, 给 Vue 的原型添加属性 $data, $props。给 Vue 的原型添加属性 $set, $delete, $watch
//@ts-expect-error Vue has function type
eventsMixin(Vue)  //添加 Vue 的原型添加方法 $on, $off, $emit, $once
//@ts-expect-error Vue has function type
lifecycleMixin(Vue) //添加 Vue 的原型添加方法 $_update,$forceUpdate, $destroy--涉及组件你的更新与销毁
//@ts-expect-error Vue has function type
renderMixin(Vue)  //添加 Vue 的原型添加方法 $nextTick, $_render

export default Vue as unknown as GlobalAPI
